﻿using Search4.Domain.Entity;
using Search4.Domain.Repository;
using System;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Search4.Web.View.Paginas
{
    public class Consulta : System.Web.UI.Page
    {
        #region CONTROLES
        public String ParametrosDeBusca { get { return Request.QueryString["params"]; } }
        public String CategoriasDeBusca { get { return Request.QueryString["categ"]; } }
        public Panel pnlConsulta { get; set; }
        public Label lblSemResultados { get; set; }
        #endregion

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            VerificaSeUsuarioEstaLogado();

            if (!String.IsNullOrWhiteSpace(ParametrosDeBusca))
            {
                ConsultarEstabelecimentos(ParametrosDeBusca);
            }
            else 
            {
                lblSemResultados.Visible = true;
            }

            if (!String.IsNullOrWhiteSpace(CategoriasDeBusca))
            {
                ConsultarEstabelecimentosPorCategoria(CategoriasDeBusca);
            }
        }

        private void VerificaSeUsuarioEstaLogado()
        {
            var lbtPainel = (LinkButton)Master.FindControl("lbtPainel");
            var lblSeparador = (Label)Master.FindControl("lblSeparador");
            var lbtCadastro = (LinkButton)Master.FindControl("lbtCadastro");
            var lblWelcome = (Label)Master.FindControl("lblWelcome");
            var lbtLogin = (LinkButton)Master.FindControl("lbtLogin");
            var lbtLogout = (LinkButton)Master.FindControl("lbtLogout");
            var usuarioLogado = Session["USUARIO"] != null ? true : false;
            if (usuarioLogado)
            {
                lbtLogin.Visible = false;
                lbtCadastro.Visible = false;
                lbtLogout.Visible = true;
                lblWelcome.Visible = true;
                lbtPainel.Visible = true;
                lblSeparador.Visible = true;
            }
            else
            {
                lbtLogin.Visible = true;
                lbtCadastro.Visible = true;
                lbtLogout.Visible = false;
                lblWelcome.Visible = false;
                lbtPainel.Visible = false;
                lblSeparador.Visible = false;
            }
        }

        private void ConsultarEstabelecimentos(String parametrosDeBusca)
        {
            var estabelecimentoRepository = new EstabelecimentoRepository();
            var estabelecimentos = estabelecimentoRepository.ObterPorQualquerCoisa(parametrosDeBusca);

            CarregaEstabelecimentos(estabelecimentos);
        }

        private void ConsultarEstabelecimentosPorCategoria(String categoriasDeBusca)
        {
            var estabelecimentoRepository = new EstabelecimentoRepository();
            var estabelecimentos = estabelecimentoRepository.ObterPorCategoria(categoriasDeBusca);

            CarregaEstabelecimentos(estabelecimentos);
        }

        private void CarregaEstabelecimentos(System.Collections.Generic.List<Estabelecimento> estabelecimentos)
        {
            if (estabelecimentos.Count > 0)
            {
                for (int i = 0; i < estabelecimentos.Count; i++)
                {
                    //Monta div do mapa e linha divisoria
                    var divMapa = new HtmlGenericControl("div");
                    divMapa.ID = String.Concat("map_canvas", i);
                    divMapa.Attributes.Add("class", "mapa-consulta-hide");

                    var lbtEsconderMapa = new LinkButton();
                    lbtEsconderMapa.ID = String.Concat("lbtEsconderMapa", i);
                    lbtEsconderMapa.CssClass = "esconder-mapa-sim";
                    lbtEsconderMapa.Text = "Esconder mapa";
                    lbtEsconderMapa.OnClientClick = String.Format("EsconderMapa('{0}', '{1}'); return false;", divMapa.ID, lbtEsconderMapa.ID);

                    var hr = new HtmlGenericControl("hr");
                    hr.Attributes.Add("class", "linha-divisor");
                    //Fim da montagem div do mapa


                    var divConsulta = new HtmlGenericControl("div");
                    divConsulta.Attributes.Add("class", "consulta");

                    var divConsultaFoto = new HtmlGenericControl("div");
                    divConsultaFoto.Attributes.Add("class", "consulta-foto");

                    var image = new Image();
                    image.ID = String.Concat("imgEstabelecimento", i);
                    image.ImageUrl = "~/css/images/shop-default.png";

                    divConsultaFoto.Controls.Add(image);

                    //Montagem da div consulta result
                    var divConsultaResult = new HtmlGenericControl("div");
                    divConsultaResult.Attributes.Add("class", "consulta-result");
                    var h3 = new HtmlGenericControl("h3");
                    var lbtNomeEstabelecimento = new LinkButton();
                    lbtNomeEstabelecimento.ID = String.Concat("lbtNomeEstabelecimento", i);
                    lbtNomeEstabelecimento.CssClass = "link-button";
                    lbtNomeEstabelecimento.Text = estabelecimentos[i].Nome;
                    lbtNomeEstabelecimento.Click += lbtNomeEstabelecimento_Click;
                    lbtNomeEstabelecimento.CommandArgument = estabelecimentos[i].IdEstabelecimento.ToString();
                    h3.Controls.Add(lbtNomeEstabelecimento);

                    var pDescricao = new HtmlGenericControl("p");
                    pDescricao.InnerText = estabelecimentos[i].Descricao;

                    var pCategoria = new HtmlGenericControl("p");
                    pCategoria.InnerHtml = "<strong>Categoria: </strong>";
                    var lblCategoria = new Label();
                    lblCategoria.ID = String.Concat("lblCategoria", i);
                    lblCategoria.Text = estabelecimentos[i].Segmento;
                    pCategoria.Controls.Add(lblCategoria);

                    var pTelefone = new HtmlGenericControl("p");
                    pTelefone.InnerHtml = "<strong>Telefone: </strong>";
                    var lblTelefone = new Label();
                    lblTelefone.ID = String.Concat("lblTelefone", i);
                    lblTelefone.Text = estabelecimentos[i].Telefone;
                    pTelefone.Controls.Add(lblTelefone);

                    var pEmail = new HtmlGenericControl("p");
                    pEmail.InnerHtml = "<strong>Email: </strong>";
                    var lblEmail = new Label();
                    lblEmail.ID = String.Concat("lblEmail", i);
                    lblEmail.Text = estabelecimentos[i].Email;
                    pEmail.Controls.Add(lblEmail);

                    var endereco = ConsultaEnderecoDoUsuario(estabelecimentos[i].Endereco.IdEndereco);

                    var pEndereco = new HtmlGenericControl("p");
                    pEndereco.InnerHtml = "<strong>Endereco: </strong>";
                    var lblEndereco = new Label();
                    lblEndereco.ID = String.Concat("lblEndereco", i);
                    lblEndereco.Text = String.Format("{0} {1} - {2} - {3} - {4}", endereco.Logradouro, endereco.Numero, endereco.Bairro, endereco.Cidade, endereco.UF);
                    pEndereco.Controls.Add(lblEndereco);
                    var enderecoCompleto = String.Format("{0} {1}, {2}, {3}, {4}", endereco.Logradouro, endereco.Numero, endereco.Bairro, endereco.Cidade, endereco.UF);


                    //Montagem da div botões
                    var divBotoes = new HtmlGenericControl("div");
                    var lbtVerMapa = new LinkButton();
                    lbtVerMapa.ID = String.Concat("lbtVerMapa", i);
                    lbtVerMapa.CssClass = "result-link";
                    lbtVerMapa.Text = "Ver no mapa";
                    lbtVerMapa.OnClientClick = String.Format("ExibirMapa('{0}', '{1}', '{2}'); return false;", divMapa.ID, lbtEsconderMapa.ID, enderecoCompleto);

                    var lblSeparadorDois = new Label();
                    lblSeparadorDois.CssClass = "result-link";
                    lblSeparadorDois.Text = " | ";

                    var lbtContato = new LinkButton();
                    lbtContato.ID = String.Concat("lbtContato", i);
                    lbtContato.CssClass = "result-link";
                    lbtContato.Text = "Enviar mensagem";

                    divBotoes.Controls.Add(lbtVerMapa);
                    divBotoes.Controls.Add(lblSeparadorDois);
                    divBotoes.Controls.Add(lbtContato);
                    // fim montagem div botões

                    divConsultaResult.Controls.Add(h3);
                    divConsultaResult.Controls.Add(pDescricao);
                    divConsultaResult.Controls.Add(pCategoria);
                    divConsultaResult.Controls.Add(pTelefone);
                    divConsultaResult.Controls.Add(pEmail);
                    divConsultaResult.Controls.Add(pEndereco);
                    divConsultaResult.Controls.Add(divBotoes);
                    //Fim montagem da div consulta result

                    divConsulta.Controls.Add(divConsultaFoto);
                    divConsulta.Controls.Add(divConsultaResult);
                    divConsulta.Controls.Add(divMapa);
                    divConsulta.Controls.Add(lbtEsconderMapa);
                    divConsulta.Controls.Add(hr);

                    pnlConsulta.Controls.Add(divConsulta);
                    pnlConsulta.Controls.Add(hr);
                }
                lblSemResultados.Visible = false;
            }
            else
            {
                lblSemResultados.Visible = true;
            }
        }

        void lbtNomeEstabelecimento_Click(object sender, EventArgs e)
        {
            var btn = (LinkButton)(sender);
            Response.Redirect(String.Concat("/Paginas/Detalhe.aspx?e=", btn.CommandArgument));
        }

        private Endereco ConsultaEnderecoDoUsuario(Int32 idEndereco)
        {
            var enderecoRepository = new EnderecoRepository();
            return enderecoRepository.ObterPeloIdentificador(idEndereco);
        }
    }
}
